package com.gqr.threadobjectclasscommonmethods;

/**
 * 通过讲解join原理，分析出join的代替写法
 */
public class JoinPrinciple {

    public static void main(String[] args) throws InterruptedException {
        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName() + "执行完毕");
            }
        });

        thread1.start();

        System.out.println("开始等待子线程运行完毕");
//        thread1.join();
        // join的等价
        /**
         * 主线程进入到同步代码块内 执行thread1.wait  主线程进入休眠状态
         * thread1.run方法执行完毕 会调用notify 这个是native内执行的
         * 主线程被唤醒 然后继续执行
         */
        synchronized (thread1){
            thread1.wait();
        }
        System.out.println("所有子线程执行完毕");
    }
}
